package learn.up.java.basic;

import org.junit.Test;

/**
 *浮点运算很少是精确的。虽然一些数字（譬如 0.5 ）可以精确地表示为二进制（底数 2）小数（因为 0.5 等于 2 -1），
 *但其它一些数字（譬如 0.1 ）就不能精确的表示。因此，浮点运算可能导致舍入误差，产生的结果接近 — 但不等于
 * — 您可能希望的结果。
 * @author NANUTO
 * @date 2017年11月30日 上午12:28:25
 */
public class BinaryDemo {

	@Test
	public void floats() {
		double s=0;
		  for (int i=0; i<26; i++)
		    s += 0.1;
		  System.out.println(s);
//		  类似的， 0.1*26 相乘所产生的结果不等于 0.1 自身加 26 次所得到的结果。
		  System.out.println( 0.1 * 26);
	}
	
	@Test
	public void doubles()  {
/*
 * 	当将浮点数强制转换成整数时，产生的舍入误差甚至更严重，因为强制转换成整
 * 数类型会舍弃非整数部分，甚至对于那些“看上去似乎”应该得到整数值的计算，
 * 也存在此类问题。例如，下面这些语句：
 */
		double d = 29.0 * 0.01;
		  System.out.println(d);    //0.29
		  System.out.println(d * 100);  //28.999999999999996
		  System.out.println((int) (d * 100));  //28
	}
}
